

#include "adc1.h"

/**
 * @brief       初始化ADC
 * @param       无
 * @retval      无
 */
void adc_init(void)
{
    adc_digi_pattern_config_t adc1_digi_pattern_config;         /* ADC1配置句柄 */
    adc_digi_configuration_t adc1_init_config;                  /* ADC1初始化句柄 */
    
    /* 配置ADC1 */
    adc1_digi_pattern_config.atten = ADC_ATTEN_DB_11;           /* 配置ADC衰减程度 */
    adc1_digi_pattern_config.channel = ADC_ADCX_CHY;            /* 配置ADC通道 */
    adc1_digi_pattern_config.unit = ADC_UNIT_1;                 /* 配置ADC单元 */
    adc1_digi_pattern_config.bit_width = ADC_BITWIDTH_12;       /* 配置ADC位宽 */
    adc1_init_config.adc_pattern = &adc1_digi_pattern_config;   /* 配置将要使用的每个ADC参数 */
    adc_digi_controller_configure(&adc1_init_config);           /* 配置ADC1 */
}

/**
 * @brief       获取ADC转换且进行均值滤波后的结果
 * @param       ch      : 通道号, 0~9
 * @param       times   : 获取次数
 * @retval      通道ch的times次转换结果平均值
 */
uint32_t adc_get_result_average(uint32_t ch, uint32_t times)
{
    uint32_t temp_val = 0;
    uint8_t t;

    for (t = 0; t < times; t++) /* 获取times次数据 */
    {
        temp_val += adc1_get_raw(ch);
        vTaskDelay(5);
    }

    return temp_val / times;    /* 返回平均值 */
}



#if 0
/**********************************
 * @brief       程序入口
 * @param       无
 * @retval      无
 ***********************************/
i2c_obj_t i2c0_master;

void app_main(void)
{
    esp_err_t ret;
    uint16_t adcdata;
    float voltage;
    ret = nvs_flash_init();                                         /* 初始化NVS */
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
    {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    
    LED_init();
    usart_init(115200); 
    i2c0_master = iic_init(I2C_NUM_0);  /* 初始化IIC0 */
    spi2_init();                        /* 初始化SPI2 */
    xl9555_init(i2c0_master);           /* IO扩展芯片初始化 spi上扩展端口要用*/
    lcd_init();                         /* 初始化LCD */
    adc_init();                         /* 初始化ADC */
    
    lcd_clear(WHITE);
    lcd_show_string(10,50,"ESP32",BLACK,GREEN,16,0); 
    lcd_show_string(10,70,"ADC TEST",BLACK,GREEN,16,0); 
    lcd_show_string(10,90,"BeijiaPunk",BLACK,GREEN,16,0); 

    lcd_show_string(10,110,"ADC1_CH7_VAL:",BLACK,BLUE,16,0); 
    lcd_show_string(10,130,"ADC1_CH7_VOL:",BLACK,BLUE,16,0);
    
    while(1)
    {
        
        adcdata = adc_get_result_average(ADC_ADCX_CHY, 20);
        
        lcd_show_num(114,110,adcdata,5,YELLOW,BLACK,16);//lcd_show_xnum(114, 110, adcdata, 5, 16, 0, BLUE);       /* 显示ADC采样后的原始值 */

        voltage = (float)adcdata * (3.3 / 4095);                /* 获取计算后的带小数的实际电压值 */
        lcd_show_floatNum(114,130,voltage,4,YELLOW,BLACK,16);
        // adcdata = voltage;                                      /* 赋值整数部分给adcx变量 */
        // lcd_show_xnum(114, 130, adcdata, 1, 16, 0, BLUE);       /* 显示电压值的整数部分 */
        
        // voltage -= adcdata;                                     /* 把已经显示的整数部分去掉，留下小数部分 */
        // voltage *= 1000;                                        /* 小数部分乘以1000 */
        // lcd_show_xnum(130, 130, voltage, 3, 16, 0x80, BLUE);    /* 显示小数部分 */
    
        LED_TOGGLE();                                           /* LED翻转函数 */
        
        vTaskDelay(100);
    }
}

#endif 